<html>

<head>
<title>Adapter Pattern</title>
<link rel="stylesheet" type="text/css" href="../../../style.css">
</head>

<body>

<h1>Adapter </h1>
<ul>
  <li><a href="#Purpose">Purpose</a></li>
  <li><a href="#Structure">Structure</a></li>
  <li><a href="#Applications">Applications</a></li>
  <li><a href="#Consequences">Consequences</a></li>
</ul>
<h2><a name="Purpose">Purpose</a></h2>
<ul type="square">
  <li>Convert the interface of a class into another interface clients expect. </li>
  <li>Adapter lets classes work together that couldn't otherwise because of 
	incompatible interfaces.</li>
</ul>
<h2><a name="Structure">Structure</a></h2>
<p>&nbsp; <img border="0" src="Adapter_Model1.gif" width="494" height="204"></p>
<ul type="square">
  <li><b>Target :</b> Defines the domain-specific interface that Client uses.</li>
  <li><b>Client :</b> Collaborates with objects conforming to the Target 
	interface.</li>
  <li><b>Adaptee :</b> Defines an existing interface that needs adapting.</li>
  <li><b>Adapter :</b> Adapts the interface of Adaptee to the Target interface.</li>
</ul>
<h2><a name="Applications">Applications</a></h2>
<ul type="square">
  <li>you want to use an existing class, and its interface does not match the 
	one you need.</li>
  <li>you want to create a reusable class that cooperates with unrelated or 
	unforeseen classes, that is, classes that don't necessarily have compatible 
	interfaces.</li>
  <li>(object adapter only) you need to use several existing subclasses, but 
	it's impractical to adapt their interface by subclassing every one. An 
	object adapter can adapt the interface of its parent class.</li>
</ul>
<h2><a name="Consequences">Consequences</a></h2>
<ul type="square">
  <li>Class and object adapters have different trade-offs.<ol>
    <li>A class adapter<ol type="a">
      <li>adapts Adaptee to Target by committing to a concrete Adapter class. As 
		a consequence, a class adapter won't work when we want to adapt a class 
		and all its subclasses.</li>
      <li>lets Adapter override some of Adaptee's behavior, since Adapter is a 
		subclass of Adaptee.</li>
      <li>introduces only one object, and no additional pointer indirection is 
		needed to get to the adaptee.</li>
    </ol>
    </li>
    <li>An object adapter<ol type="a">
      <li>lets a single Adapter work with many Adaptees&#8212;that is, the Adaptee 
		itself and all of its subclasses (if any). The Adapter can also add 
		functionality to all Adaptees at once.</li>
      <li>makes it harder to override Adaptee behavior. It will require 
		subclassing Adaptee and making Adapter refer to the subclass rather than 
		the Adaptee itself.</li>
      </ol>
      </li>
    </ol>
  </li>
</ul>

</body>

</html>
